<!DOCTYPE html>
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(async () => {
  // Demonstrate that the object was in fact cloned, and is not the original
  // object leaking between worlds.
  const detail = { foo: 1 };
  performance.mark("m", { detail });
  const mark = performance.getEntriesByName("m")[0];
  assert_equals(mark.detail, mark.detail, "each access should produce the same object");
  assert_not_equals(mark.detail, detail, "the object should be a clone, not the original");
  assert_equals(Object.getPrototypeOf(mark.detail), Object.prototype,
    "main world object should have the right prototype");

  testRunner.evaluateScriptInIsolatedWorld(1,
    `const mark = performance.getEntriesByName("m")[0];
     mark.detail.foo = 2;
     performance.mark("m2", { detail: {
       hasRightPrototype: Object.getPrototypeOf(mark.detail) === Object.prototype
     } });`);
  assert_equals(detail.foo, 1, "original object shouldn't be mutated through a clone");
  assert_equals(mark.detail.foo, 1, "main world clone shouldn't be mutated through isolated clone");
  assert_true(performance.getEntriesByName("m2")[0].detail.hasRightPrototype,
    "isolated world object should have the right prototype");
}, "A clone should be used in an isolated world, but only one clone");
</script>
